﻿Imports BibliotecaCliente

Public Class FormCliente

    Inherits System.Windows.Forms.Form
    'Código generado por el Diseñador de Windows Forms

    Dim WithEvents WinSockCliente As New BibliotecaCliente.BCliente

    'Delegado para poder acceder a los miembros del form desde el sub imprimirSmsAlChat
    Delegate Sub ImprimirSmsAlChatDelegate(ByVal mensaje As String)


    Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click
        With WinSockCliente
            'Determino a donde se quiere conectar el usuario
            .IPDelHost = txtIP.Text
            .PuertoDelHost = txtPuerto.Text

            If txtIP.Text = "" Then
                txtIP.Focus()
                Exit Sub
            ElseIf txtPuerto.Text = "" Then
                txtPuerto.Focus()
                Exit Sub
            ElseIf txtNick.Text = "" Then
                txtNick.Focus()
                Exit Sub

            End If
            'Me conecto y verifico que la conexión es correcta, si es así que siga los pasos
            If .Conectar() = True Then


                '______________________________________________________________________
                'OPCION DE PRUEBA PARA COGER EL MOTE DE LA PERSONA QUE SE CONECTA
                Dim mote As String = "0" + txtNick.Text + " se ha conectado al Chat."
                .EnviarDatos(mote)
                '______________________________________________________________________

                Panel.Visible = False
                txtmensaje.Focus()

                Me.txtChat.Clear()


                'ponemos en la cabecera del FORM que es CLIENTE + ALIAS
                Me.Text += ": " + Me.txtNick.Text


                'imprimirSmsAlChat(txtNick.Text + " te has conectado al Chat.")
            Else
                MsgBox("no te puedes conectar")
            End If
        End With
    End Sub

    Private Sub WinSockCliente_DatosRecibidos(ByVal datos As String) Handles WinSockCliente.DatosRecibidos
        '        MsgBox("El servidor envio el siguiente mensaje: " & datos)
        Try
            imprimirSmsAlChat(datos)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub imprimirSmsAlChat(ByVal sms As String)
        If Me.InvokeRequired Then
            'Si es necesario utilizar Invoke, llamo al delegado
            Me.Invoke(New ImprimirSmsAlChatDelegate(AddressOf imprimirSmsAlChat), New Object() {sms})
        Else
            'Aquí puedo modificar los controles de esta forma
            txtChat.Text += ControlChars.Lf + sms
        End If

    End Sub

    Private Sub WinSockCliente_ConexionTerminada() Handles WinSockCliente.ConexionTerminada
        'MsgBox("Finalizo la conexion")
    End Sub

    Private Sub btnEnviarMensaje_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviarMensaje.Click


        'imprimirSmsAlChat(Me.txtNick.Text + " dice: " + txtmensaje.Text)

        'NO LO IMPRIMO DIRECTAMENTE, SINO QUE HAGO QUE PASE POR EL SERVER Y LO ENVIE EL DE NUEVO
        'Envio lo que esta escrito en la caja de texto del mensaje
        WinSockCliente.EnviarDatos(Me.txtNick.Text + " dice: " + txtmensaje.Text)

        txtChat.ScrollToCaret()
        txtmensaje.Clear()
        txtmensaje.Focus()
    End Sub

    Private Sub txtChat_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtChat.TextChanged
        'para mantener la barra de desplazamiento actualizada a lo último que escribes.
        txtChat.SelectionStart = txtChat.TextLength
        txtChat.ScrollToCaret()
    End Sub

    Private Sub FormCliente_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    Private Sub FormCliente_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        WinSockCliente.EnviarDatos(Me.txtNick.Text & " se ha desconectado.")
        WinSockCliente.cerrarSocket("cerrar")

        Me.Finalize()
        Me.Dispose()
        Me.Close()
        Process.GetCurrentProcess().Kill()
    End Sub
End Class
